package cn.jtfadmin.base.lang.config.user;

import cn.jtfadmin.base.lang.common.security.UserDetails;
import cn.jtfadmin.base.lang.config.ApplicationHolder;
import org.springframework.context.ApplicationContext;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 当前用户持有者
 *
 * @author jtf
 */
public class UserHolder {


    /**
     * 获取当前登录人id
     * 如果没有返回null;
     * @return 当前登录人id,如果没有返回null
     */
    public static String getUserId() {
        UserDetails userDetails = getUserDetails();
        if (Objects.isNull(userDetails)) {
            return null;
        }
        return userDetails.getUserId();
    }


    /**
     * 获取当前登录人token
     *
     * @return token,如果没有返回null
     */
    public static String getToken() {
        return ApplicationHolder.getApplicationContext().getBean(UserRealHolder.class).getToken();
    }



    /**
     * 获取必须的与用户id
     *
     * @return 当前登录人id
     * @throws RuntimeException 如果当前没有
     */
    public static String getRequiredUserId() {
        String userId = getUserId();
        if (Objects.isNull(userId)) {
            throw new RuntimeException("未登录");
        }
        return userId;
    }

    /**
     * 获取当前人
     *
     * @return 当前用户明细, 如果没有返回null
     */
    public static UserDetails getUserDetails() {
        return ApplicationHolder.getApplicationContext().getBean(UserRealHolder.class).getUserDetails();

    }



    /**
     * 刷新当期用户信息
     * @return 当前用户信息
     */
    public static UserDetails refreshCurrentUser() {
        return ApplicationHolder.getApplicationContext().getBean(UserRealHolder.class).refreshCurrentUser();
    }

}

